import { defineConfig, loadEnv } from 'vite'
import { wrapperEnv } from './src/utils/getEnv'
import { visualizer } from 'rollup-plugin-visualizer'
import vue from '@vitejs/plugin-vue'
import AutoImport from 'unplugin-auto-import/vite' //自动引入ref,reactive等等等
import viteCompression from 'vite-plugin-compression'
import VueSetupExtend from 'vite-plugin-vue-setup-extend'
// import eslintPlugin from "vite-plugin-eslint";
import { resolve } from 'path'

// https://vitejs.dev/config/
// defineConfig 工具函数，这样不用 jsdoc 注解也可以获取类型提示
export default defineConfig(({ command, mode }) => {
	console.log(command, mode, '===')
	const root = process.cwd()
	const env = loadEnv(mode, root) // 环境变量对象
	const viteEnv = wrapperEnv(env)
	console.log('环境变量------', env)
	console.log('文件路径（ process.cwd()）------', root)
	console.log('文件路径（dirname）------', __dirname + '/src')
	// const { VITE_DROP_CONSOLE } = wrapperEnv(env)
	return {
		// 项目根目录
		root: './',
		base: '/', //  开发或生产环境服务的公共基础路径：默认'/'   1、绝对 URL 路径名： /foo/；  2、完整的 URL： https://foo.com/； 3、空字符串或 ./（用于开发环境）
		publicDir: resolve(__dirname, './dist'), //默认'public'  作为静态资源服务的文件夹  (打包public文件夹会没有，里面得东西会直接编译在dist文件下)
		assetsInclude: resolve(__dirname, './src/assets'), // 静态资源处理

		// 服务器配置
		server: {
			// 服务器端口号
			port: viteEnv.VITE_PORT,
			// 是否自动打开浏览器
			open: viteEnv.VITE_OPEN,
			// 代理配置
			proxy: {
				'/api': {
					target: 'http://localhost:8080',
					changeOrigin: true,
					rewrite: (path) => path.replace(/^\/api/, '')
				}
			}
		},
		// 构建配置
		build: {
			// 输出目录
			outDir: 'dist',
			// 是否生成源代码映射文件
			sourcemap: true,
			chunkSizeWarningLimit: 1500, //chunk 大小警告的限制（以 kbs 为单位）默认：500

			// vite依赖分包
			minify: 'terser', // 必须开启：使用 terserOptions 才有效果
			terserOptions: {
				compress: {
					drop_console: mode === 'production' ? true : false,
					drop_debugger: mode === 'production' ? true : false
				}
			},
			rollupOptions: {
				// 静态资源分类打包
				output: {
					// 在 UMD 构建模式下为这些外部化的依赖提供一个全局变量
					globals: {},
					chunkFileNames: 'static/js/[name]-[hash].js',
					entryFileNames: 'static/js/[name]-[hash].js',
					assetFileNames: 'static/[ext]/[name]-[hash].[ext]',
					manualChunks(id) {
						// 静态资源分拆打包
						if (id.includes('node_modules')) {
							return id.toString().split('node_modules/')[1].split('/')[0].toString()
						}
					}
				}
			}
		},
		plugins: [
			vue(),
			// * name 可以写在 script 标签上
			VueSetupExtend(),
			// * EsLint 报错信息显示在浏览器界面上
			// eslintPlugin(),
			AutoImport({
				imports: [
					'vue',
					'vue-router',
					'pinia',
					{
						axios: [
							['default', 'axios'] // import { default as axios } from 'axios',
						]
					}
				]
			}),
			// * gzip compress
			viteEnv.VITE_BUILD_GZIP &&
				viteCompression({
					verbose: true,
					disable: false,
					threshold: 10240,
					algorithm: 'gzip',
					ext: '.gz'
				}),
			// * 是否生成包预览(分析依赖包大小,方便做优化处理)
			viteEnv.VITE_REPORT && visualizer()
		],
		// ******resolver配置******
		resolve: {
			alias: {
				// 别名配置
				// 键必须以斜线开始和结束
				'@': resolve(__dirname, 'src'),
				components: resolve(__dirname, './src/components'),
				assets: resolve(__dirname, './src/assets')
			}
		}
	}
})
